﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using SushiSOAPServices.Exceptions;
using SushiSOAPServices.Dominio;
using SushiSOAPServices.Persistencia;


namespace SushiSOAPServices
{
    // NOTA: puede usar el comando "Rename" del menú "Refactorizar" para cambiar el nombre de clase "ClienteServices" en el código, en svc y en el archivo de configuración a la vez.
    public class Personas : IPersonas
    {      
        //ObjetosDAO
        private PersonaDAO personaDAO = null;
        private PersonaDAO PersonaDAO
        {
            get
            {
                if (personaDAO == null)
                    personaDAO = new PersonaDAO();
                return personaDAO;
            }
        }
        
        public Persona CrearPersona(string username, string contrasena, Persona persona)
        {
            SeguridadWS.SeguridadClient proxySecurity = new SeguridadWS.SeguridadClient();
            SeguridadWS.Usuario usuarioExistente = proxySecurity.obtenerUsuarioPorUsername(username);

            if (usuarioExistente != null)
            {

                PersonaException ex = new PersonaException { Message = "El nombre de usuario " + username + " ya existe. Por favor, ingrese un ID valido" };
                throw new FaultException<PersonaException>(ex, ex.Message);

            }

            Persona dniExiste = PersonaDAO.obtenerPersonaPorDNI(persona.NumDocIden);

            if (dniExiste != null)
            {

                PersonaException ex = new PersonaException { Message = "El D.N.I. " + persona.NumDocIden + " ya existe." };
                throw new FaultException<PersonaException>(ex, ex.Message);
            }

            Persona personaCreada = PersonaDAO.Crear(persona);

            SeguridadWS.Usuario usuario_ = new SeguridadWS.Usuario();

            usuario_.Username = username;
            usuario_.Contrasena = contrasena;
            usuario_.IdPersona = personaCreada.IdPersona;

            proxySecurity.crearUsuario(usuario_);

            return personaCreada;
               
        }

        public Persona ObtenerPersona(int IdPersona)
        {
            return PersonaDAO.Obtener(IdPersona);
        }
    }
}
